// f(11) = Math.min(f(11 - c1) + 1, ... f(11 - ci) + 1)  f(x)是代表金额为x所需要的硬币数量

var coinChange = function(coins, amount) {
  const f = [] // 存储已经计算过了的硬币个数值
  f[0] = 0
  // [1 - amount] 之间的总额
  for (let i = 1; i <= amount; i++) {
    f[i] = Infinity
    for (let j = 0; j < coins.length; j++) {
      // coins中是否有比当前面额i小的硬币，如果有才有可能有解
      if (i - coins[j] >= 0) {
        f[i] = Math.min(f[i], f[i - coins[j]] + 1)
      }
    }
  }  
  return f[amount] === Infinity ? -1 : f[amount]
};
